home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Utilities / Workspace / Locus / Source / FolderViewer.m < prev    next >
Text File  |  1995-06-12  |  5KB  |  242 lines

  1.  
  2. /*
  3.     Copyright 1993  Jeremy Slade.
  4.  
  5.     You are free to use all or any parts of the Locus project
  6.     however you wish, just give credit where credit is due.
  7.     The author (Jeremy Slade) shall not be held responsible
  8.     for any damages that result out of use or misuse of any
  9.     part of this project.
  10.  
  11. */
  12.  
  13. /*
  14.     Project: Locus
  15.     
  16.     Class: FolderViewer
  17.     
  18.     Description: See FolderViewer.h
  19.         
  20.     Original Author: Jeremy Slade
  21.     
  22.     Revision History:
  23.         Created
  24.             V.101    JGS Wed Feb  3 23:17:39 GMT-0700 1993
  25.  
  26. */
  27.  
  28. #import "FolderViewer.h"
  29.  
  30. #import "Folder.h"
  31. #import "Globals.h"
  32. #import "GroupBrowser.h"
  33. #import "WidePopupController.h"
  34.  
  35.  
  36. @implementation FolderViewer
  37.  
  38.  
  39. // -------------------------------------------------------------------------
  40. //   Creating, Initializing methods
  41. // -------------------------------------------------------------------------
  42.  
  43.  
  44. + initialize
  45. {
  46.     [self setVersion:FolderViewer_VERSION];
  47.     return ( self );
  48. }
  49.  
  50.  
  51.  
  52. - initContent:(const NXRect *)rect
  53.     style:(int)aStyle
  54.     backing:(int)bufferingType
  55.     buttonMask:(int)mask
  56.     defer:(BOOL)flag;
  57. {
  58.     [super initContent:rect
  59.         style:aStyle
  60.         backing:bufferingType
  61.         buttonMask:mask
  62.         defer:flag];
  63.  
  64.     [[[self setHideOnDeactivate:hideDeactive]
  65.         setExcludedFromWindowsMenu:NO]
  66.         setMiniwindowIcon:"FolderIcon"];
  67.     [contentView setAutoresizeSubviews:YES];
  68.  
  69.     groupMenu = [[PopUpList allocFromZone:[self zone]] init];
  70.     widePopupController = [WidePopupController allocFromZone:[self zone]];
  71.     
  72.     return ( self );
  73. }
  74.  
  75.  
  76.  
  77. - awakeFromNib
  78. /*
  79.     Perform final initializations
  80. */
  81. {
  82.     NXAttachPopUpList ( groupMenuCover, groupMenu );
  83.     [widePopupController initForButton:groupMenuCover andPopup:groupMenu];
  84.     
  85.     [browser setDelegate:delegate];
  86.     [[[browser setTarget:delegate]
  87.         setAction:@selector(selectItem:)]
  88.         setDoubleAction:@selector(launchSelectedItems:)];
  89.         
  90.     return ( self );
  91. }
  92.  
  93.  
  94.  
  95. - free
  96. {
  97.     [groupMenu free];
  98.     [widePopupController free];
  99.     [NXApp removeWindowsItem:self];
  100.     return ( [super free] );
  101. }
  102.  
  103.  
  104.  
  105. // -------------------------------------------------------------------------
  106. //   Subviews
  107. // -------------------------------------------------------------------------
  108.  
  109.  
  110. - groupMenu
  111. {
  112.     return ( groupMenu );
  113. }
  114.  
  115.  
  116. - groupMenuCover
  117. {
  118.     return ( groupMenuCover );
  119. }
  120.  
  121.  
  122.  
  123. - browser
  124. {
  125.     return ( browser );
  126. }
  127.  
  128.  
  129.  
  130. // -------------------------------------------------------------------------
  131. //   Settting the title
  132. // -------------------------------------------------------------------------
  133.  
  134.  
  135. - setTitleAsFilename:(const char *)aString
  136. /*
  137.     Sets the title of the window, and automatically adds it to the Windows menu.
  138. */
  139. {
  140.     [super setTitleAsFilename:aString];
  141.     [NXApp addWindowsItem:self title:aString filename:YES];
  142.     return ( self );
  143. }
  144.  
  145.  
  146.  
  147. // -------------------------------------------------------------------------
  148. //   Misc
  149. // -------------------------------------------------------------------------
  150.  
  151.  
  152. - updateInspector:sender
  153. /*
  154.     Sent by the Inspector when it needs to be updated
  155. */
  156. {
  157.     // Pass this on to our delegate -- the Folder
  158.     [delegate updateInspector:sender];
  159.     return ( self );
  160. }
  161.  
  162.  
  163.  
  164. - becomeKeyWindow
  165. {
  166.     return ( [super becomeKeyWindow] );
  167. }
  168.  
  169.  
  170. - becomeMainWindow
  171. /*    
  172.     Tell our delegate (the folder) to become the key folder
  173. */
  174. {
  175.     [delegate becomeKeyFolder];
  176.     return ( [super becomeMainWindow] );
  177. }
  178.  
  179.  
  180.  
  181. - resignKeyWindow
  182. {
  183.     return ( [super resignKeyWindow] );
  184. }
  185.  
  186.  
  187. - resignMainWindow
  188. /*    
  189.     Tell our delegate (the folder) it is no longer the key folder
  190. */
  191. {
  192.     [delegate resignKeyFolder];
  193.     return ( [super resignMainWindow] );
  194. }
  195.  
  196.  
  197.  
  198. - miniaturize:sender
  199. /*
  200.     Sent when the user clicks on the miniaturize button.  Causes the window to resign keywindow status.
  201. */
  202. {
  203.     [self resignKeyWindow];    
  204.     [super miniaturize:sender];    
  205.     return ( self );
  206. }
  207.  
  208.  
  209.  
  210. - keyDown:(NXEvent *)event
  211. /*
  212.     This message is sent when a key is pressed and this viewer is the key window.  This method passes it first to the folder to handle it, then to the browser, and finally up the responder chain.
  213. */
  214. {
  215.     int mask = (NX_CONTROLMASK | NX_ALTERNATEMASK
  216.         | NX_COMMANDMASK );
  217.  
  218.     // Let the viewer's delegate (the actual Folder) respond to it first off
  219.     if ( [delegate keyDown:event] )
  220.         return ( self );
  221.             
  222.     // Next send it to the browser
  223.     if ( !(event->flags & mask ) && event->data.key.charSet == NX_ASCIISET ) {
  224.         [browser selectKey:event->data.key.charCode time:event->time];
  225.         return ( self );
  226.     }
  227.     
  228.     // If nobody else has responded to it, just pass it on...
  229.     return ( [super keyDown:event] );
  230. }
  231.  
  232.  
  233.  
  234. - (BOOL)commandKey:(NXEvent *)event
  235. {
  236.     // Pass the event to the GroupMenu
  237.     return ( [groupMenu commandKey:event] ? YES : [super commandKey:event] );
  238. }
  239.  
  240.  
  241. @end
  242.